Map是JavaScript ES6中新增的資料結構 ,類似於object ,不過Map還是跟object有著以下的差異:
let map = new Map()
//也可以在宣告的時候就賦值,傳入[key , value]
let map = new Map([
["amber", 18],
["shane", 33],
]);
新增key-value pairs(鍵值對),如果key已經存在,舊的值會被新的值覆蓋
//第一個值傳入key 第二個值傳入value
map.set('tom', 28);
map.set('jason', 27);
因為set會回傳map的本身,所以可以使用chaining(鏈)的寫法
let map = new Map()
.set('jay', 13)
.set('ban', 23)
.set('luna', 49);
用key來獲取value,如果沒有這個key會回傳undefined
map.get('tom'); //get 28
獲取Map的長度
map.size // get 2
檢查Map是否擁有該key,會回傳boolean值
map.has('tom') // true or false
刪除Map的某個key,如果刪除成功會回傳true,失敗則是false
map.delete('tom') // true or false
清除Map所有的鍵值對,不會回傳值
map.clear('tom')
let map = new Map([
["amber", 18],
["shane", 33],
]);
map.keys() // {'amber', 'shane'}
map.values() // {18, 33}
map.entires() // {"amber" => 18, "shane" => 33}
可以搭配for of或forEach來遍歷map
//for of
for(let [key, value] of map){
console.log('key', key, 'value', value)
}
//forEach
map.forEach((value, key) => {
console.log('key', key, 'value', value)
})
//....擴展運算子
[...map.keys()] // ["amber", "shane"]
WeakeMap結構類似於Map,只接受object作為key,不接受其它類型的值,不支援迭代的方法ex. keys()、values()、entries()等等,WeakMap的key為弱引用,當作為key的object在其它地方沒有被引用的時候,就會被js垃圾回收機制自動回收,整個鍵值對都會消失。
let weakMap = new WeakMap()
weakMap.set('mark', 19)
//Invalid value used as weak map key
let obj = {name: 'mark'}
weakMap.set(obj, 5)
//correct
參考資料:MDN